<?php

// think\facade\Queue::push('dow',[123,234])
// php think queue:work --queue run --daemon

namespace app\crontab\job;

use think\queue\job;

class Run{

    public function fire(Job $job, $data){
    
            $this->R();

            //$this->redis->LPUSH('vv',json_encode([$job, $data]) );

            $mod        = "\app\index\model\\".$data['type'] ;

            //....这里执行具体的任务
            $comment_id = ( new $mod )->process($data);

            if ($comment_id===true) {
                //如果任务执行成功后 记得删除任务，不然这个任务会重复执行，直到达到最大重试次数后失败后，执行failed方法
                $job->delete();
            }else{
                if ( false === $comment_id) {
                    // 数据有误 删除
                    $job->delete();
                }else{
                    $attempts = $job->attempts();
                    // 重试三次后则认为任务失败
                    if ($attempts > 3) {
                        // TODO 写log纪录失败信息
                        $job->delete();
                    }
                }
            }            
            
            // 也可以重新发布这个任务
            // $job->release($delay); //$delay为延迟时间
          
    }
    
    public function failed($data){
    
        // ...任务达到最大重试次数后，失败了
    }

    public $redis   = null ;
    private function R() {
        if ( ! $this->redis) {
            $this->redis = \think\facade\Cache::store('redis')->handler();
            //\think\facade\Cache::store('default');
        }

        return $this->redis;
    }

}